#ifndef __STM32F4XX_SM2_H
#define __STM32F4XX_SM2_H

#ifdef __cplusplus
extern "C" {
#endif

#include <stdint.h>

/* HALStatus定义 */
typedef enum {
    HAL_OK       = 0x00,
    HAL_ERROR    = 0x01,
    HAL_BUSY     = 0x02,
    HAL_TIMEOUT  = 0x03
} HAL_StatusTypeDef;

/* SM2Command定义 */
#define SM2_CMD_SIGN      0x00  // SM2签名
#define SM2_CMD_VERIFY    0x01  // SM2Verify

/**
 * @brief InitializeSM2Module
 * @retval HALStatus
 */
HAL_StatusTypeDef SM2_Init(void);

/**
 * @brief SettingsSM2私钥
 * @param key 私钥指针（32字节）
 * @param key_len Key长度
 * @retval HALStatus
 */
HAL_StatusTypeDef SM2_SetKey(uint8_t* key, uint32_t key_len);

/**
 * @brief ExecuteSM2Command
 * @param cmd Command：SM2_CMD_SIGN/VERIFY
 * @param input InputData
 * @param input_len Input长度
 * @param output OutputData
 * @param output_len Output长度（由Function填写）
 * @retval HALStatus
 */
HAL_StatusTypeDef SM2_ProcessCommand(uint8_t cmd, 
                                     const uint8_t* input, 
                                     uint32_t input_len,
                                     uint8_t* output, 
                                     uint32_t* output_len);

#ifdef __cplusplus
}
#endif

#endif /* __STM32F4XX_SM2_H */
